/**
 * 需求:设计一个LogTime装饰器，可以给实例添加一个属性，用于记录实例对象
 * 的创建时间，再添加一个方法用于读取创建时间。
 * 
 */

type Constructor = new (...args: any[]) => {}

// <T extends Constructor> 泛型约束
function LogTime<T extends Constructor>(target: T) {
    return class extends target {
        createdTime: Date
        constructor(...args: any[]) {
            super(...args)
            this.createdTime = new Date()
        }
        getTime() {
            return `该对象的创建时间是：${this.createdTime}`
        }
    }
}

interface Person {
    getTime(): void
}

@LogTime
class Person {
    name: string
    age: number
    constructor(
        name: string,
        age: number
    ) {
        this.name = name
        this.age = age
    }
    speak() {
        console.log('你好呀！')
    }
}


const p1 = new Person('张三', 18)
console.log(p1.getTime())


